const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
const webpack = require('webpack')

const wpConfig = {
    // mode:'development', // 也可以写在命令行里 --mode=development。如果这写了，命令行里也写了，则命令行优先级高，会覆盖这里的。未指定mode则默认是production。
    entry:'./src/index.js',
    output:{
        path:path.resolve(__dirname,'dist'),
        filename:'bundle.js'
    },
    module:{
        rules:[
            {
                test:/\.txt$/,
                use:['raw-loader']
            }
        ]
    },
    plugins:[
        new HtmlWebpackPlugin({
            template:path.resolve(__dirname,'index.html'),
            filename:'a.html'
        }),
        new webpack.DefinePlugin({
            'aaa':JSON.stringify('aaa111')  // 不JSON.stringify一下直接写‘aaa111'，打包后的aaa111就成了个变量名了，会报错aaa111 is undefined
        })
    ]
}

// 对象格式导出
// module.exports = wpConfig


// 函数格式导出,此时可以接收命令行上带的参数
module.exports = (env,argv)=>{
    // console.log(env) // 第一次参数其实就是 第二个参数argv.env的值。
                     // 其值是个对象，命令行上写了 --env=xxx, 这个对象里会有个键值对 xxx:true

    // console.log(process.env.NODE_ENV) // 参数上定义了--env 不影响 process.env.NODE_ENV。
                                      // process.env.NODE_ENV在webpack.config.js中始终是undefined, 这里输出的也是undefined。
                                      // 在各个module文件中(例如index.js)跟mode的值一样。

    // console.log(argv) // 命令行上带的其它参数可以从第二个参数里取，比如 --mode=xxx , 用argv.mode就可以拿到xxx。
                      // 只能带 env mode name等几个webpack允许的参数，不是什么参数名都可以的。
    return wpConfig
}

